package org.domain.sigepac.Entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;


@Entity
@Table(name="tb_campus")
public class Campus extends EntidadeAbstrata {
	

	private static final long serialVersionUID = 4214599062707970032L;

	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
	
	@Column(name = "nome", nullable = false, length = 100)
	@NotNull
	@Length(max = 100)	
	private String nome;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_cidade", referencedColumnName = "id", nullable = false)
	private Cidade cidade; 
	
	@Transient
	private Set<Curso> cursos;
		
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "campus")
	@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
	private Set<Turma> turmas= new HashSet<Turma>(0);
	
	
	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}



	public Set<Curso> getCursos() {
		if(cursos==null){
			cursos=new HashSet<Curso>(0);
			
			for (Turma turma : getTurmas()) {
				cursos.add(turma.getCurso());
			}
		}
		return cursos;
	}

	public void setCursos(Set<Curso> cursos) {
		this.cursos = cursos;
	}

	public Set<Turma> getTurmas() {
		return turmas;
	}

	public void setTurmas(Set<Turma> turmas) {
		this.turmas = turmas;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	

	public Serializable getId() {
		// TODO Auto-generated method stub
		return id;
	}

}
